package com.takeaway.utils.myconnectionpool;

import javax.sql.DataSource;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.ShardingKeyBuilder;
import java.util.logging.Logger;

/**
 * @author 后台赖骏
 */
public interface MyDataBase extends DataSource {
    /** 获得连接
     * @return 返回连接
     * @throws SQLException 抛出异常
     */
    @Override
    default Connection getConnection() throws SQLException{
        return null;
    }

    /** 获取连接
     * @param username 用户名
     * @param password 密码
     * @return 返回连接
     * @throws SQLException 抛出异常
     */
    @Override
    default Connection getConnection(String username, String password) throws SQLException{
        return null;
    }
    /** null
     * @return 返回null
     *
     */
    @Override
    default PrintWriter getLogWriter(){
        return null;
    }

    /** null
     * @param out null
     */
    @Override
    default void setLogWriter(PrintWriter out){

    }

    /**null
     * @param seconds null
     */
    @Override
    default void setLoginTimeout(int seconds){

    }

    /**null
     * @return null
     */
    @Override
    default int getLoginTimeout(){
        return 0;
    }

    /**null
     * @param iFace null
     * @param <T> null
     * @return null
     */
    @Override
    default <T> T unwrap(Class<T> iFace){
        return null;
    }

    /** null
     * @param iFace null
     * @return null
     */
    @Override
    default boolean isWrapperFor(Class<?> iFace){
        return false;
    }

    /** null
     * @return null
     */
    @Override
    default Logger getParentLogger(){
        return null;
    }

    /**  null
     * @return null
     * @throws SQLException null
     */
    @Override
    default ShardingKeyBuilder createShardingKeyBuilder() throws SQLException {
        return DataSource.super.createShardingKeyBuilder();
    }

    /**获取代理连接
     * @return 返回代理连接
     * @throws SQLException 抛出异常
     */
     PoolAgent getAgentConnection() throws SQLException;

    /**关闭代理连接
     * @param poolAgent 返回代理连接进行关闭
     */
     void closeConnection(PoolAgent poolAgent);
}
